package seqAlignment.utils;

import java.io.File;

import junit.framework.TestCase;

public class SubstitutionMatrixTest extends TestCase {
	File file = new File("D:\\Java\\Workspace\\cs576_practice0\\blosum-62.txt");
	SubstitutionMatrix matrix = new SubstitutionMatrix();

	public void testSetFile() {
		try {
			matrix.setFile(file);
		} catch (Exception e) {
			fail(e.toString());
		}
	}

	public void testGetXStrMapping() {
		testSetFile();
		String[] strs={"A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V"};
		for (int i=0;i<strs.length;i++) {
			assertEquals(i, matrix.getXStrMapping().get(strs[i]).intValue());
		}
	}

	public void testGetYStrMapping() {
		testSetFile();
		String[] strs={"A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V"};
		for (int i=0;i<strs.length;i++) {
			assertEquals(i, matrix.getYStrMapping().get(strs[i]).intValue());
		}
	}

	public void testGetValueMatrix() {
		testSetFile();
		
		int[][] valueMatrix = {
				{ 4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3,
						-2, 0 },
				{ -1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2,
						-3 },
				{ -2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3 },
				{ -2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4,
						-3, -3 },
				{ 0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2,
						-2, -1 },
				{ -1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2 },
				{ -1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2,
						-2 },
				{ 0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2,
						-3, -3 },
				{ -2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2,
						-3 },
				{ -1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3,
						-1, 3 },
				{ -1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2,
						-1, 1 },
				{ -1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2,
						-2 },
				{ -1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1,
						-1, 1 },
				{ -2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3,
						-1 },
				{ -1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1,
						-4, -3, -2 },
				{ 1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2 },
				{ 0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2,
						-2, 0 },
				{ -3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2,
						11, 2, -3 },
				{ -2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2,
						7, -1 },
				{ 0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3,
						-1, 4 } };
		
			for (int x=0;x<valueMatrix.length;x++) {
				for (int y=0;y<valueMatrix[x].length;y++) {
					assertEquals(valueMatrix[x][y], matrix.getValueMatrix()[x][y]);
				}
			}
	}
}
